package fr.afcepf.ai91.qualimetrie.business;

import fr.afcepf.ai91.qualimetrie.entity.Adresse;
import fr.afcepf.ai91.qualimetrie.entity.Personne;

/**
 * Definition des fonctionnalites pour la gestion
 * de l'entitee {@link Personne} et {@link Adresse}.
 * @author Stagiaire
 *
 */
public interface IBusinessGestionPersonne {
    /**
     * Methode permettant d'ajouter une entitee
     * {@link Adresse} dans la BDD 'qualimetrie'.
     * @param adr l'{@link Adresse} a ajouter.
     * @return
     * <code>
     *  <ul>
     *      <li>si l'ajout a fonctionne :
     *      l'objet Adresse avec sa cle
     *      primaire '{@link Adresse#getId()}'
     *      renseignee</li>
     *      <li>sinon l'objet Adresse avec
     *      sa cle primaire '{@link Adresse#getId()}'
     *      null</li>
     *  </ul>
     * </code>
     */
    Adresse ajouter(Adresse adr);
    /**
     * Methode permettant d'ajouter une entitee
     * {@link Personne} dans la BDD 'qualimetrie'.
     * @param pers l'{@link Personne} a ajouter.
     * @return
     * <code>
     *  <ul>
     *      <li>
     *          Si la Personne possede une Adresse
     *          <br /> non null :
     *          <ol type="1">
     *              <li>
     *                  Ajout de l'adresse
     *              </li>
     *              <li>
     *                  Si Ajout Adresse ok, ajout
     *                  de la personne
     *              </li>
     *              <li>
     *                  Si ajout de la Personne ok,
     *                  association de l'Adresse a la
     *                  Personne
     *              </li>
     *          </ol>
     *      </li>
     *      <li>Si une erreur cf sinon ...</li>
     *      <li>
     *          sinon :
     *          <ul type="square">
     *          <li>si l'ajout a fonctionne :
     *          l'objet Personne avec sa cle
     *          primaire '{@link Personne#getId()}'
     *          renseignee</li>
     *          <li>sinon l'objet Personne avec
     *          sa cle primaire '{@link Personne#getId()}'
     *          null</li>
     *          </ul>
     *      </li>
     *  </ul>
     * </code>
     */
    Personne ajouter(Personne pers);
    /**
     * Methode permettant d'associer une Adresse
     * a la Personne dans la BDD.
     * @param pers la Personne avec sa nouvelle Adresse.
     * @return <code>
     *  <ul>
     *      <li>Si association Ok : <br /> l'Adresse
     *      de la Personne est renseignee. </li>
     *      <li>Si POK : <br />
     *      l'Adresse de la personne est null.</li>
     *  </ul>
     * </code>
     */
    Personne associerAdresse(Personne pers);
}
